﻿package com.eitb.programas.olentzero09{
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*;

	import com.eitb.literales.*;
	import com.eitb.util.logging.*;
	
	import com.eitb.programas.olentzero09.events.*;
	import com.eitb.programas.olentzero09.literales.*;
	
	import com.eitb.nielsen.*;

	public class Main extends Sprite {
		private const XML_ID:String="olentzero09";

		private static var vMenu:IVistaMenu;
		private static var vJuego:IVistaJuego;
		private static var vOlentzero:IVistaOlentzero;
		private static var vFinal:IVistaFinal;

		private var idiomaRetrived:String=loaderInfo.parameters.idioma;
		private var idioma:int;

		public function Main():void {
			// transforma el idioma recibido al codigo correcto de idioma en flash
			switch (this.idiomaRetrived) {
				case "en" :
					this.idioma=Literales.EN;
					break;
				case "es" :
					this.idioma=Literales.ES;
					break;
				case "eu" :
				case "baq" :
					this.idioma=Literales.EU;
					break;
				case "fr" :
					this.idioma=Literales.FR;
					break;
				default :
					this.idioma=Literales.EN;
			}

			// inicia el menu
			this.initMenu();
		}


		// MENU
		private function initMenu():void {
			var dialogo:DialogoMenu = new DialogoMenu();
			var modelo:ModeloMenu = new ModeloMenu();

			// almacena las vistas para trabajar con ellas si es necesario
			Main.vMenu=dialogo;

			// pone en pantalla la menu
			this.addChild(dialogo);

			// enlaza la aplicacion de menu
			dialogo.initControlador(modelo);
			modelo.initVista(dialogo);

			// inicializa las variables 
			modelo.initLiterales(new MenuLiterales(this.idioma));
			modelo.init();
			
			dialogo.jugarBtn.addEventListener(MouseEvent.CLICK, this.onMenuMouseClick);
		}

		private function onMenuMouseClick(evt:MouseEvent):void {
			// inicia el programa de diputacion
			this.initJuego();

			// oculta la portada
			evt.currentTarget.removeEventListener(MouseEvent.CLICK, this.onMenuMouseClick);
			Main.vMenu.finalize();
		}
		// MENU
		// JUEGO
		private function initJuego():void {
			new NielsenCall("Olentzero09","NuevaPartida");

			var dialogo:DialogoJuego=new DialogoJuego  ;
			var modelo:ModeloJuego=new ModeloJuego  ;
			var mObjetos:ModeloObjetos=new ModeloObjetos  ;

			// almacena las vistas para trabajar con ellas si es necesario
			Main.vJuego=dialogo;
			// inicializa el olentzero con algo para que luego cambiar de estado
			Main.vOlentzero = new DialogoOlentzero();

			// pone en pantalla el programa
			this.addChild(dialogo);
			
			// enlaza la aplicacion lanza objetos con el juego
			mObjetos.initVistaJuego(dialogo);
			mObjetos.initLimites({x:0, y:-20,xMax:300,yMax:240});
			dialogo.initControladorObjetos(mObjetos);

			// enlaza la aplicacion de juego
			dialogo.initControlador(modelo);
			modelo.initVista(dialogo);

			
			// inicia los eventos
			dialogo.initEvents();
			dialogo.addEventListener(OlentzeroEvent.MUERTE, this.onMuerte);
			dialogo.addEventListener(OlentzeroEvent.COLISION, this.onColision);
			dialogo.addEventListener(OlentzeroEvent.COLISION, dialogo.onColision);
			
			// carga un estado de olentzero inicial
			this.transToOlentzero();

			// inicializa las variables 
//			modelo.initIdioma(this.idioma);
			//modelo.initLiterales(new JuegoLiterales(this.idioma));

			// ejecuta rutinas previas
			//modelo.start();
			//mOlentzero.start();
			mObjetos.start();
		}
		public function onColision(evt:OlentzeroEvent):void {
			if(evt.colision == "ovni") {
				this.transToOvni();
			} else if(evt.colision == "enemigo") {
				if (Main.vOlentzero is DialogoOlentzeroOvni) {
					this.transToOlentzero();
				} 
			}
		}
		private function onMuerte(evt:OlentzeroEvent):void {
			// inicia el programa de diputacion
			this.initFinal(ModeloJuego.puntos);

			// oculta la portada
			Main.vJuego.removeEventListener(OlentzeroEvent.MUERTE, this.onMuerte);
			Main.vJuego.removeEventListener(OlentzeroEvent.COLISION, this.onColision);
			Main.vJuego.finalize();
		}
		private function transToOvni():void {
			var dialogoOlentzero:DialogoOlentzeroOvni = new DialogoOlentzeroOvni();
			var mOlentzero:ModeloOlentzeroOvni=new ModeloOlentzeroOvni;
			Main.vJuego.addChild(dialogoOlentzero);
			
			// enlaza la aplicacion de olenzero a pie
			mOlentzero.initVista(dialogoOlentzero);
			mOlentzero.initVistaJuego(Main.vJuego);
			mOlentzero.initLimites({x:0, y:0,xMax:300,yMax:225});
			mOlentzero.initPosicion(Main.vOlentzero.getOlentzeroPosition());

			Main.vOlentzero = dialogoOlentzero;
			Main.vJuego.setOlentzero(mOlentzero, dialogoOlentzero);
		}
		
		private function transToOlentzero():void {
			var dialogoOlentzero:DialogoOlentzero = new DialogoOlentzero();
			var mOlentzero:ModeloOlentzero=new ModeloOlentzero();
			Main.vJuego.addChild(dialogoOlentzero);
			
			// enlaza la aplicacion de olenzero a pie
			mOlentzero.initVista(dialogoOlentzero);
			mOlentzero.initVistaJuego(Main.vJuego);
			mOlentzero.initLimites({x:0, y:0,xMax:300,yMax:200});
			mOlentzero.initPosicion(Main.vOlentzero.getOlentzeroPosition());

			Main.vOlentzero = dialogoOlentzero;
			Main.vJuego.setOlentzero(mOlentzero, dialogoOlentzero);
		}
		// JUEGO
		// FINAL		
		private function initFinal(puntos:int):void {
			var dialogo:DialogoFinal = new DialogoFinal();
			var modelo:ModeloFinal = new ModeloFinal();

			// almacena las vistas para trabajar con ellas si es necesario
			Main.vFinal=dialogo;

			// pone en pantalla la menu
			this.addChild(dialogo);

			// enlaza la aplicacion de menu
			dialogo.initControlador(modelo);
			modelo.initVista(dialogo);

			// inicializa las variables 
			modelo.initLiterales(new FinalLiterales(this.idioma));
			modelo.initPuntos(puntos);
			modelo.init();

			// inicializa los eventos de la portada
			dialogo.jugarBtn.addEventListener(MouseEvent.CLICK, this.onFinalMouseClick);
		}

		private function onFinalMouseClick(evt:MouseEvent):void {
			// inicia el programa de diputacion
			this.initJuego();

			// oculta la portada
			evt.currentTarget.removeEventListener(MouseEvent.CLICK, this.onMenuMouseClick);
			Main.vFinal.finalize();
		}
		// FINAL		
	}
}